/**********************************************************************************
 * Nombre: 
 * Descripción:
 * Parámetros:
 * 		
 */

/*
 * Variables Globales: 
 * 		map: se creara un mapa con sus respectivos marcadores solo para ser mostrado.
 * 		map2: se creará un mapa para permitir al usuario editarlo, agregando marcadores.
 * 		marcadores: un arreglo que contendrá todos los marcadores que agregue el usuario a 
 * 					un mapa.
 * 		geocoder:  para realizar directamente el proceso de codificación geográfica inversa
 *                 (Dada una posición geográfica, la traduce en una dirección entendible para
 * 				    las personas).
 * 				   
 */
var map; 
var map2;
var marcador = null;
var dire = new String("");
var geocoder;
var zona = new google.maps.Polygon();
var icono;



/**********************************************************************************
 * Nombre: mostrar_mapa
 * Descripción: Muestra un mapa centrado en un determinado lugar, con un zoom determinado y
 * 				con los marcadores determinados. Genera un recuadro delimitando la zona que
 * 				rodea cada marcador.
 * Parámetros:
 * 		lat: valor de tipo real que determina la latitud del punto donde se centra el mapa.
 * 		lon: valor de tipo real que determina la longitud del punto donde se centra el mapa.
 * 		z: valor numerico que determina el zoom que tendrá el mapa.
 * 		marks: es un arreglo que contiene todos los marcadores del mapa.
 * 			marks[i][0] = valor de tipo real que determina la latitud del marcador.
 * 			marks[i][1] = valor de tipo real que determina la longitud del marcador.
 * 			marks[i][3] = valor de tipo string que determina la descripción del marcador.
 */


function mostrar_mapa(lat,lon,z,marks,id_div) {
	
    var latlng = new google.maps.LatLng(lat,lon);
	
    var myOptions = {
        zoom: z,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById(id_div), myOptions);

    var image = 'img/pata.png';
	
    //var location = new google.maps.LatLng(-34.36,-58.26);
    var cant = marks.length;
    var message = new Array();
    for (var i=0; i<cant;i++){
        var location = new google.maps.LatLng(marks[i][0],marks[i][1]);
        var marker = new google.maps.Marker({
            position: location, 
            map: map,
            icon: icono
        });
		
        // Se agrega el texto al marcador. 
        agregarTexto(marker, marks[i][2]);
    }
    generarRecuadro(marks[0][0],marks[0][1], map);
	
	
	
}

function generarRecuadro(lat, lon, mapa_ent, alto, largo){
	
    zona.setMap(null);
	
    var recuadro = [
    new google.maps.LatLng(lat+largo,lon+(alto+((20*alto)/100))),
    new google.maps.LatLng(lat+largo,lon-(alto+((20*alto)/100))),
    new google.maps.LatLng(lat-largo,lon-(alto+((20*alto)/100))),
    new google.maps.LatLng(lat-largo,lon+(alto+((20*alto)/100))),  
    ];

    zona.setOptions({
        paths: recuadro,
        strokeColor: "#000",
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: "#777",
        fillOpacity: 0.35
    });

    zona.setMap(mapa_ent);
}

/**********************************************************************************
 * Nombre: agregarTexto
 * Descripción: Agrega el texto al marcador pasado como parametro y el evento click para poder mostrarlo. 
 * Parámetros:
 * 		marker: marcador al que se le va a agregar el texto.
 * 		text: texto a agregar.
 */

function agregarTexto(marker, text) {
    text = text.replace("'","");
    text = text.replace("'","");
    var infowindow = new google.maps.InfoWindow(
    {
        content: text,
        size: new google.maps.Size(50,50)
    });
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
}

/***********************************************************************************/

function editar_mapa(lat,lon,z,id_div,icon){	
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(lat,lon);
    var myOptions = {
        zoom: z,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map2 = new google.maps.Map(document.getElementById(id_div), myOptions);
    icono = icon;
    // Genera el evento de hacer un click sobre el mapa
    // y llama a la funcion placeMarker
    google.maps.event.addListener(map2, 'click', function(event) {
        placeMarker(event.latLng);
    });
	
    return map2;
}

function placeMarker(location) {
    var clickedLocation = new google.maps.LatLng(location);
    eliminarMark(); 
    zona.setMap(null);
    codeLatLng(location);
}



// Se le pasa un identificador de un campo de texto 
// y marca en el mapa la ubicacion escrita
var result;
function agregarMarcador(address) {
    //var address = document.getElementById(id_txt).value;
    
    if (geocoder) {
        geocoder.geocode( {
            'address': address
        }, function(results, status) {
       
            if (status == google.maps.GeocoderStatus.OK) {
                eliminarMark();
                codeLatLng(results[0].geometry.location);
            }else{
                alert("No Hay descripcion para la ubicacion");
                marcador = undefined;
            }
        });
    }else{
        marcador = undefined;
    }
    
}
 
function getResult(){
    return result;
}
  



//var infowindow = new google.maps.InfoWindow();
// Dada una posicion pos (latitul, longitud)
// Devuelve el nombre de la locacion!
function codeLatLng(pos){//,id_txt,id_btn,id_textArea) {
	
    if (geocoder) {
        geocoder.geocode({
            'latLng': pos
        }, function(results, status) {
            var image = 'img/pata.png';
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[1]) {
          	
                    map2.setCenter(pos);
                    marker = new google.maps.Marker({
                        position: pos,
                        icon: icono, 
                        map: map2
                    }); 
                    marcador = marker;
            
                    dire = results[0].formatted_address;
                    generarRecuadro(pos.lat(), pos.lng(), map2, 0.005, 0.004);
            
            
            
                    var info = dire.split(',');
                    var ciudad = info[1]
                    var prov = info[2].replace(/ Province/gi,"");
            
                    pol1 = getPoligono().getAt(0).getAt(0);
                    pol2 = getPoligono().getAt(0).getAt(1);
                    pol3 = getPoligono().getAt(0).getAt(2);
                    pol4 = getPoligono().getAt(0).getAt(3);
            
                    $("#provincia").attr("value",info[2].replace(/ Province/gi,""));
                    $("#ciudad").attr("value",info[1]);
                    $("#zona").attr("value",pos+"|"+pol1+"|"+pol2+"|"+pol3+"|"+pol4);
			 
                }
            } else {
                marker = new google.maps.Marker({
                    position: pos,
                    icon: image, 
                    map: map2
                });
                dire =  ""; 
                marcador = marker;  
            }
        });
    }
            	
}


function getMarcador(){
    return marcador;
}

function getDire(){
    return dire;
}


function mostrar_mapa_para_editar(lat,lon,z,marks){
    var latlng = new google.maps.LatLng(lat,lon);
    map2.setCenter(latlng);
	
    map2.setZoom(z);
	
    var location;
    var cant = marks.length;
    for (var indice=0;indice<cant;indice++){
		
        location = new google.maps.LatLng(marks[indice][0],marks[indice][1]);
        $(".secc_mark").append('<div id="'+indice+'"><div class="selec_mark"><input class="text'+indice+'" id="text'+indice+'" type="textbox"><input id="btn_ok'+indice+'" class="btn_ok" type="button" value="OK"><input id="elimMark'+indice+'" class="elimMark" type="button" value="Eliminar"></div><span class="texto_agregarComentario">Agregar Comentario</span><textarea id="text_area'+indice+'" class="comentario_mark" style="display: none"></textarea></div>');
		
        if (marks[indice][2] != undefined){
			
            var txt = marks[indice][2];
            //alert(txt);
            txt = txt.replace("'","");
            txt = txt.replace("'","");
			
            $("#text_area"+indice).val(txt);
        }
		
		
        codeLatLng(location,"text"+indice,"btn_ok"+indice);
		
		
		
    }
	
	
    return indice;
}

function getPoligono(){
    return zona.getPaths();
}		


function eliminarMark(){
    if (marcador != null){
        marcador.setMap(null);
    }
}	


function coincidencia(){
    
}
